The present invention relates to data processing by digital computer, and more particularly to extending a standard application.
A standard software application is developed by an application developer to satisfy the requirements of multiple customers of the standard application. Specific customers of a standard software application may need to extend the standard application to add customer-specific features that are not implemented by the standard application. In addition, customers of the standard application may also need to customize the features of the standard application by providing customer-specific extensions for the features implemented by the standard application. Modification of the standard application is one of the approaches for providing application extensions for a standard application. The modification approach can require the generation of multiple versions of the standard application. A version of the standard application generated for a specific customer can include all the application extensions required by the specific user. A standard application using the modification approach to implement application extensions can be difficult to maintain because each version of the standard application must be generated whenever the standard application is upgraded.
Business Add-Ins, defined by SAP R/3, available from SAP AG of Walldorf (Baden) Germany, represent another approach allowing customers to provide application extensions for a standard application. Business Add-Ins are defined parts within a standard SAP application where an application extension can be used to add additional code without modifying the standard SAP application. In order to extend the standard SAP application, a Business Add-In (BAdI) is defined by the application developer for the standard application. The application developer also defines an interface for the BAdI. The defined interface for the BAdI is used to create an adapter class for implementing the BAdI. The adapter class is used by the extension developer developing the application extension to provide an implementation of the BAdI. The application developer extends the standard application by creating an instance of the adapter class in the standard application and calling the corresponding methods of the adapter class at the appropriate time. In order to use a BAdI, an extension developer must provide his own implementation of the BAdI by implementing the enhancements defined by the BAdI and activating the implementations of the enhancements. The enhancements provided by the BAdI implementation are then called at runtime.
A Java™ application can be extended at the design level using specific Design Patterns, including, Observer, Factory, Decorator, Visitor, and Interceptor patterns. A Factory method provides a simple decision making class which returns one of several possible subclasses of an abstract base class depending on data it is provided. In the Decorator pattern, a class that surrounds a given class adds new capabilities to the given class and passes all the unchanged methods to the underlying class. The Observer pattern defines the way a number of classes can be notified of a change. The Visitor pattern can be used to add new operations for an arrangement of classes without changing the individual class definitions. An Interceptor pattern can be used to provide a simple place holder for a class that can be implemented later in the development cycle.
Java also provides extension approaches at the architecture level using object oriented frameworks, replacement of components, application programming interface (API) approaches, messaging techniques and declarative approaches (e.g., the Apache Jakarta framework Struts). In addition to these approaches Java also provides byte code enhancement techniques, such as AspectJ, HyperJ, or JMangle, which can be used to extend Java applications. Extensions to a Java application can also be implemented through dynamic proxy classes, using the dynamic proxy API. A dynamic proxy class is a class that implements a list of interfaces specified at runtime when the class is created. A method invocation through one of the interfaces on an instance of a dynamic proxy class is encoded and dispatched to another object through a uniform interface. A dynamic proxy class can be used to create a type-safe proxy object for a list of interfaces without requiring pre-generation of the class prior to compilation.